package com.xj.algorithm.leetcode;

/**
 * 学生出勤记录 I
 */
public class L551_学生的出勤记录 {

    /**
     * 给定一个字符串来代表一个学生的出勤记录，这个记录仅包含以下三个字符：

     'A' : Absent，缺勤
     'L' : Late，迟到
     'P' : Present，到场
     如果一个学生的出勤记录中不超过一个'A'(缺勤)并且不超过两个连续的'L'(迟到),那么这个学生会被奖赏。

     你需要根据这个学生的出勤记录判断他是否会被奖赏。

     示例 1:

     输入: "PPALLP"
     输出: True
     示例 2:

     输入: "PPALLL"
     输出: False

     */
    public static void main(String[] args) {
        System.out.println(checkRecord("PPALLP"));
        System.out.println(checkRecord("PPALLL"));
        System.out.println(checkRecord("AAAA"));
        System.out.println(checkRecord("LLLL"));
        System.out.println(checkRecord("LLPPPLL"));

        System.out.println(checkRecordOffice("PPALLP"));
        System.out.println(checkRecordOffice("PPALLL"));
        System.out.println(checkRecordOffice("AAAA"));
        System.out.println(checkRecordOffice("LLLL"));
        System.out.println(checkRecordOffice("LLPPPLL"));
    }

    //自己的解法：一个计数器和一个flag。遍历一次。在最后才进行判断
    public static boolean checkRecord(String s) {
        char[] arr=s.toCharArray();
        int length=arr.length;

        int a_count=0;
        int l_count=0;
        int lll_count=0;
        for(int i=0;i<length;i++){
            if(arr[i]=='A'){
                a_count++;
            }

            if(arr[i]=='L'){
                l_count++;
                if(l_count==3){
                    lll_count++;
                    l_count=2;
                }
            }else{
                l_count=0;
            }
        }

        if(a_count<=1 && lll_count<1){
            return true;
        }

        return false;
    }

    //官方解法：使用indexof。这道题难在理解题意
    public static boolean checkRecordOffice(String s) {
        int count=0;
        for(int i=0;i<s.length();i++) {
            if (s.charAt(i) == 'A') {
                count++;
            }
        }
        return count<2 && s.indexOf("LLL")<0;
    }

}
